package stringexercise;

public class StringDemo {
    public static void main(String[] args) {
        String str1=new String("hello");//会创建两个对象，第一个是String对象表示字面量hello,放在常量池中，
        //第二个是new String（），会再创建一个String对象，其内容指向字面量的内容
        String str2="hello";//字面量对象已经在常量池中，会直接复用常量池中的对象地址
        System.out.println(str1==str2);//false
        System.out.println(str1.equals(str2));//true,比较两个字符串的内容是否相同

        String str3="123abc";//常量池中没有该字面量对象，会创建该对象，放入常量池中
        String str4="123abc";//常量池中已经有了，直接复用
        String str5="123abc";//常量池中已经有了，直接复用
        System.out.println(str3==str4);//true
        System.out.println(str3==str5);//true
        System.out.println(str4==str5);//true

        str3=str3+"!";//创建新的对象，并将地址赋值给str3
        System.out.println(str3==str4);//false

        String s1="abc123";//创建s1对象放在常量池中
        String s2="abc"+"123";//编译器在编译时，若发现两个字面量相连，则会直接连接好并将结果保存起来 s2="abc123"
        System.out.println(s1==s2);

        String s3="abc";
        String s4=s3+"123";//s3是一个对象,所以在编译器并不会直接编译好，会创建一个新的对象
        System.out.println(s1==s4);//false


    }
}
